<?php
// ------------------------------------------------------------------------------------
// Bestand:       Controller, router.php
// Versie:        2.0
// Projekt:       Cursus MasterClass van Eduvision
// Datum:         04-06-2008
// Auteur(s):     Richard lagendijk/Ronald Obbens
// Email(s):      r.lagendijk@hccnet.nl
// Revisie(s):	  2.1 Omgezet naar class
//
// Beschrijving:  Deze controller wordt gebruikt om de juiste controller in te laden.
//                Een mod_rewrite zorgt ervoor dat bij elke aanroep op dit domein deze
//                routeController wordt gestart.
//
// Parameters:    www.domein.nl/Controller/Action/Parameter
//                Controller: Indien niet gevonden dan: indexController.php.
//                Action: Indien niet gevonden dan: index().
//                Parameter: Parameter voor de Action.
//
// Gebruik:       De controller wordt ingeladen en door middel van de 
//				  public function route($url)
// ------------------------------------------------------------------------------------
//

//get required files

class Router
{
	protected static $_instance;

	private $m_sController = null;
	private $m_sAction = null;
	private $m_sParameter = null;
	
	public static function getInstance()
	{
		if (is_null(self::$_instance)) 
		{
			self::$_instance = new self();
		}
		return self::$_instance;
	}
	
	private function splitURL($sRoute)
	{
		$sRoute = trim ($sRoute, '/');
		$aParts_of_Route = explode ('/', $sRoute);
				
		$this->m_sController = strtolower($aParts_of_Route[0]) . 'Controller';
		$this->m_sAction = strtolower($aParts_of_Route[1]);
		
		if(isset($aParts_of_Route[2]))
		{
			$this->m_sParameter = strtolower($aParts_of_Route[2]);
		}
	}
	
	private function checkController()
	{ 
		if (!isset($this->m_sController))
		{
 			$this->m_sController = 'indexController';
		}
		
		if (!file_exists(CONTROLLER_ROOT . $this->m_sController . '.php')) 
		{
  			 $this->m_sController = 'indexController';
		}
	}
	
	public function checkAction()
	{	
		if (!isset($this->m_sAction))
		{
  			$this->m_sAction = 'index';
		}
		
		if (!method_exists ($this->m_sController, $this->m_sAction)) 
		{
	  		$this->m_sAction = 'index';
		}
	}
	
	public function route($route)
	{
		$this->splitURL($route);
		$this->checkController();
	
		$sController = CONTROLLER_ROOT . $this->m_sController . '.php'; 
		require_once($sController);
		
		$this->checkAction();
		
		$sController = $this->m_sController;
		$sAction = $this->m_sAction;
		$objController = new $sController();
		$objController->$sAction($this->m_sParameter);	
	}
}
?>